Wir bearbeiten ein CASAS Open Data Set aus dem Bereich Care Tech. Ladet das Dataset 33 runter und lest die Daten ein.

Die ZIP Datei enthält eine Readme mit Informationen zum Datensatz und den Sensoren, sowie auch eine Darstellung der Orte der angebrachten Sensoren in der Wohnung.

Hier ein erster Eindruck von den annotierten Daten:

library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────────── tidyverse 1.3.2 ──✔ ggplot2 3.3.6      ✔ purrr   0.3.4 
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.2.1      ✔ stringr 1.4.1 
✔ readr   2.1.2      ✔ forcats 0.5.2 ── Conflicts ──────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
mydata <- read_tsv("../../Daten/hh111/hh111.ann.txt", 
                   col_names = c("timestamp", "name.of.sensor", 
                                 "room.level", "room.detail", "message", "sensor.type",
                                  "classes"))
Rows: 351353 Columns: 7── Column specification ──────────────────────────────────────────────
Delimiter: "\t"
chr  (6): name.of.sensor, room.level, room.detail, message, sensor...
dttm (1): timestamp
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
mydata

Mithilfe einer Python-Bibliothek (AL-Smarthome)[https://github.com/WSU-CASAS/AL-Smarthome] sind daraus Features extrahiert worden für weitere Untersuchungen.

myfeatures <- read_csv("../../Daten/hh111/hh111.ann.features.csv")
Rows: 351324 Columns: 37── Column specification ──────────────────────────────────────────────
Delimiter: ","
chr  (1): activity
dbl (36): lastSensorEventHours, lastSensorEventSeconds, lastSensor...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
myfeatures

Exploration

Gibt es Fehlwerte? Nein, zumindest keine expliziten NA-Werte.

mydata %>%
    is.na() %>%
    sum()
[1] 0

Welche Sensor-Typen liegen vor?

mydata %>% 
  count(sensor.type)

Wie viele Beobachtungen haben Sie von welchen Einzel-Sensoren?

mydata %>% 
  count(name.of.sensor) 

Temperatur-Sensoren sind in den Rohdaten die einzigen metrischen Werte. Für einen ersten Eindruck grafisch darstellen. Wie viele Temepratur-Sensoren gibt es in dem Datensatz und wie viele Beobachtungen stammen von den einzelnen Temperatursensoren?

mydata %>% 
  filter(sensor.type == "Control4-Temperature") %>% 
  count(name.of.sensor)
library(ggplot2)

pl1 <- ggplot(data= mydata %>% 
                    filter(sensor.type == "Control4-Temperature"))+
      geom_point(aes(y=message,x=classes,color=name.of.sensor),
      position=position_jitter(h=0.15,w=0.15))

Die Ausgabe von ggplot ist nicht Interaktiv, daher benutze ich gerne zusätzlich das Paket plotly. Der Paramerer position_jitter sorgt dafür, dass Punkte nicht überlappen, sondern wenn Beobachtungen häufiger vorkommen, diese auch häufiger Sichtbar sind und dafür eine kleine Abweichung zugerechnet bekommen. Gibt es Auffälligkeiten?

library(plotly) 
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attache Paket: ‘plotly’

Das folgende Objekt ist maskiert ‘package:ggplot2’:

    last_plot

Das folgende Objekt ist maskiert ‘package:stats’:

    filter

Das folgende Objekt ist maskiert ‘package:graphics’:

    layout
fig <- ggplotly(pl1)
fig

Betrachtung als Boxplots. Wenn die Boxen sich nicht mehr überlappen spricht man von statistisch signifikant unterschiedlich. Ausreißer erkennt man an

pl.box <- ggplot(data= mydata %>% 
                    filter(sensor.type == "Control4-Temperature"))+
      geom_boxplot(aes(y=message,x=classes, fill= name.of.sensor))

ggplotly(pl.box)

Einige Sensor-Beobachtungen haben bereits ein Flag “Ignore”. Es wird deutlich, dass das die Beobachtungen von T101 sind, die anscheinend nicht valide sind.

pl2 <- ggplot(data= mydata %>% 
                filter(sensor.type == "Control4-Temperature") %>% 
                filter(room.detail == "Ignore"))+
      geom_point(aes(y=message,x=classes, color=name.of.sensor),
                position=position_jitter(h=0.15,w=0.15))

ggplotly(pl2)

Hier alle Beobachtungswerte ohne Ignore-Flag.

pl3 <- ggplot(data= mydata %>% 
                filter(sensor.type == "Control4-Temperature") %>% 
                filter(room.detail != "Ignore"))+
      geom_point(aes(y=message,x=classes, color=name.of.sensor),
                position=position_jitter(h=0.15,w=0.15))

ggplotly(pl3)

Assoziationsregeln zur Exploration von Aktivitäten

Bei welchen Aktivitäten verändern Sensoren ihren Zustand? Dafür ist der Name des Sensors ein Item. Jeder Beobachtungstag ist eine neue Transaktion. Dann kann mit apriori-Algorithmus ermittelt werden, welche Sensoren gemeinsam ihren Zustand während bestimmter Akitivitäten ändern.

library(arules)       # Assoziationsregeln
library(lubridate)    #Extraktion von day in year yday()

# jeder einzelne Tag ist eine Transaktion
mydata <- mydata %>%
            mutate(trans_id = yday(timestamp))  %>%
              filter((room.level != "Ignore")|(room.detail != "Ignore")) 

# Aktivitaeten Label bekommen            
groups <- mydata %>% select(classes) %>% base::unique() %>% unlist()

Um die Ergebnisse des apriori-Algorithmus abspeichern zu können, wird vorher eine Liste angelegt. Für jede Aktivität gibt es einen Eintrag.

myrules <- vector("list",length(groups))
names(myrules) <- groups

Für jede Aktivität ermittelt apriori Algorithmus Regeln.

for (i in seq_along(groups)){
myrules[[groups[i]]] <- mydata %>%
    filter(classes == groups[i]) %>%
    transactions(format = "long", cols=c("trans_id","name.of.sensor")) %>%
      apriori(parameter=list(supp=0.5, conf=0.9, maxlen=6)) 
}
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 30 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[36 item(s), 61 transaction(s)] done [0.00s].
sorting and recoding items ... [29 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6
Warnung: Mining stopped (maxlen reached). Only patterns up to a length of 6 returned!
 done [0.07s].
writing ... [1241815 rule(s)] done [0.66s].
creating S4 object  ... done [0.23s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 24 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[24 item(s), 49 transaction(s)] done [0.00s].
sorting and recoding items ... [6 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6 done [0.00s].
writing ... [128 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 18 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[8 item(s), 36 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 26 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[11 item(s), 52 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 25 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[12 item(s), 51 transaction(s)] done [0.00s].
sorting and recoding items ... [6 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6 done [0.00s].
writing ... [142 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 20 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 41 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 17 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[8 item(s), 35 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 17 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[8 item(s), 35 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 12 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[4 item(s), 24 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 23 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[14 item(s), 46 transaction(s)] done [0.00s].
sorting and recoding items ... [5 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [7 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 26 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[9 item(s), 52 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 28 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[13 item(s), 57 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [8 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 28 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[15 item(s), 57 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [12 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 26 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[8 item(s), 53 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 27 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[22 item(s), 54 transaction(s)] done [0.00s].
sorting and recoding items ... [5 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 done [0.00s].
writing ... [30 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 4 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[7 item(s), 8 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [6 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 4 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[7 item(s), 8 transaction(s)] done [0.00s].
sorting and recoding items ... [4 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [9 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 12 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 25 transaction(s)] done [0.00s].
sorting and recoding items ... [1 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 done [0.00s].
writing ... [1 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 13 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[12 item(s), 26 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [8 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 12 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[11 item(s), 24 transaction(s)] done [0.00s].
sorting and recoding items ... [1 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 done [0.00s].
writing ... [0 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 9 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 19 transaction(s)] done [0.00s].
sorting and recoding items ... [1 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 done [0.00s].
writing ... [1 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 21 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[15 item(s), 43 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [12 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 9 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[7 item(s), 18 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 19 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[9 item(s), 38 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 22 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5 item(s), 44 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 12 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 25 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 10 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[8 item(s), 20 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [12 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 6 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[10 item(s), 12 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [3 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 10 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 20 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [4 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 10 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5 item(s), 20 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 8 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5 item(s), 16 transaction(s)] done [0.00s].
sorting and recoding items ... [1 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 done [0.00s].
writing ... [1 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 8 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[9 item(s), 16 transaction(s)] done [0.00s].
sorting and recoding items ... [3 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [0 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 3 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 6 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 8 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[38 item(s), 17 transaction(s)] done [0.00s].
sorting and recoding items ... [31 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6
Warnung: Mining stopped (maxlen reached). Only patterns up to a length of 6 returned!
 done [0.05s].
writing ... [2249200 rule(s)] done [1.11s].
creating S4 object  ... done [0.40s].
Apriori

Parameter specification:

Algorithmic control:

Absolute minimum support count: 10 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[6 item(s), 21 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [2 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].

Darstellung der Assoziationsregeln. Eine “leere” Regel, d.h. LHS = {}, bedeutet, dass egal was links im Itemset steht, es wird immer zur RHS führen.

# Ausgabe der Ergebnisse
for (i in seq_along(groups)){
print(groups[i])
myrules[[groups[i]]] %>% head(n=3, by="lift") %>% inspect
}
        classes1 
"Other_Activity" 
classes2 
 "Sleep" 
               classes3 
"Bed_Toilet_Transition" 
          classes4 
"Personal_Hygiene" 
classes5 
 "Dress" 
      classes6 
"Morning_Meds" 
        classes7 
"Cook_Breakfast" 
       classes8 
"Eat_Breakfast" 
               classes9 
"Wash_Breakfast_Dishes" 
classes10 
   "Read" 
classes11 
 "Toilet" 
   classes12 
"Leave_Home" 
   classes13 
"Enter_Home" 
classes14 
  "Drink" 
         classes15 
"Work_On_Computer" 
classes16 
   "Cook" 
classes17 
    "Eat" 
    classes18 
"Wash_Dishes" 
    classes19 
"Cook_Dinner" 
   classes20 
"Eat_Dinner" 
           classes21 
"Wash_Dinner_Dishes" 
 classes22 
"Watch_TV" 
     classes23 
"Work_At_Desk" 
classes24 
  "Groom" 
     classes25 
"Evening_Meds" 
classes26 
  "Bathe" 
 classes27 
"Step_Out" 
classes28 
  "Phone" 
   classes29 
"Cook_Lunch" 
  classes30 
"Eat_Lunch" 
          classes31 
"Wash_Lunch_Dishes" 
classes32 
  "Relax" 
      classes33 
"Work_At_Table" 
         classes34 
"Entertain_Guests" 
classes35 
   "Work" 
LS0tCnRpdGxlOiAiRGF0ZW5wcm9qZWt0IC0gU2luZ2xlLXJlc2lkZW50IGFwYXJ0bWVudCBkYXRhIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgpXaXIgYmVhcmJlaXRlbiBlaW4gIFtDQVNBUyBPcGVuIERhdGEgU2V0XShodHRwOi8vY2FzYXMud3N1LmVkdS9kYXRhc2V0cy8pIGF1cyBkZW0gQmVyZWljaCBDYXJlIFRlY2guIApMYWRldCBkYXMgW0RhdGFzZXQgMzNdKGh0dHA6Ly9jYXNhcy53c3UuZWR1L2RhdGFzZXRzL2hoMTExLnppcCkgcnVudGVyIHVuZCBsZXN0IGRpZSBEYXRlbiBlaW4uCgpEaWUgWklQIERhdGVpIGVudGjDpGx0IGVpbmUgUmVhZG1lIG1pdCBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlbnNhdHogdW5kIGRlbiBTZW5zb3Jlbiwgc293aWUgYXVjaCBlaW5lIERhcnN0ZWxsdW5nIGRlciBPcnRlIGRlciBhbmdlYnJhY2h0ZW4gU2Vuc29yZW4gaW4gZGVyIFdvaG51bmcuIAoKSGllciBlaW4gZXJzdGVyIEVpbmRydWNrIHZvbiBkZW4gYW5ub3RpZXJ0ZW4gRGF0ZW46CgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCm15ZGF0YSA8LSByZWFkX3RzdigiLi4vLi4vRGF0ZW4vaGgxMTEvaGgxMTEuYW5uLnR4dCIsIAogICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gYygidGltZXN0YW1wIiwgIm5hbWUub2Yuc2Vuc29yIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb29tLmxldmVsIiwgInJvb20uZGV0YWlsIiwgIm1lc3NhZ2UiLCAic2Vuc29yLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzZXMiKSkKbXlkYXRhCmBgYAoKTWl0aGlsZmUgZWluZXIgUHl0aG9uLUJpYmxpb3RoZWsgKEFMLVNtYXJ0aG9tZSlbaHR0cHM6Ly9naXRodWIuY29tL1dTVS1DQVNBUy9BTC1TbWFydGhvbWVdIHNpbmQgZGFyYXVzIEZlYXR1cmVzIGV4dHJhaGllcnQgd29yZGVuIGbDvHIgd2VpdGVyZSBVbnRlcnN1Y2h1bmdlbi4gCgpgYGB7cn0KbXlmZWF0dXJlcyA8LSByZWFkX2NzdigiLi4vLi4vRGF0ZW4vaGgxMTEvaGgxMTEuYW5uLmZlYXR1cmVzLmNzdiIpCm15ZmVhdHVyZXMKYGBgCgojIEV4cGxvcmF0aW9uCgpHaWJ0IGVzIEZlaGx3ZXJ0ZT8gTmVpbiwgenVtaW5kZXN0IGtlaW5lIGV4cGxpeml0ZW4gTkEtV2VydGUuCgpgYGB7cn0KbXlkYXRhICU+JQogICAgaXMubmEoKSAlPiUKICAgIHN1bSgpCmBgYAoKV2VsY2hlIFNlbnNvci1UeXBlbiBsaWVnZW4gdm9yPwoKYGBge3J9Cm15ZGF0YSAlPiUgCiAgY291bnQoc2Vuc29yLnR5cGUpCmBgYAoKV2llIHZpZWxlIEJlb2JhY2h0dW5nZW4gaGFiZW4gU2llIHZvbiB3ZWxjaGVuIEVpbnplbC1TZW5zb3Jlbj8KCmBgYHtyfQpteWRhdGEgJT4lIAogIGNvdW50KG5hbWUub2Yuc2Vuc29yKSAKYGBgCgpUZW1wZXJhdHVyLVNlbnNvcmVuIHNpbmQgaW4gZGVuIFJvaGRhdGVuIGRpZSBlaW56aWdlbiBtZXRyaXNjaGVuIFdlcnRlLiBGw7xyIGVpbmVuIGVyc3RlbiBFaW5kcnVjayBncmFmaXNjaCBkYXJzdGVsbGVuLiBXaWUgdmllbGUgVGVtZXByYXR1ci1TZW5zb3JlbiBnaWJ0IGVzIGluIGRlbSBEYXRlbnNhdHogdW5kIHdpZSB2aWVsZSBCZW9iYWNodHVuZ2VuIHN0YW1tZW4gdm9uIGRlbiBlaW56ZWxuZW4gVGVtcGVyYXR1cnNlbnNvcmVuPwoKYGBge3J9Cm15ZGF0YSAlPiUgCiAgZmlsdGVyKHNlbnNvci50eXBlID09ICJDb250cm9sNC1UZW1wZXJhdHVyZSIpICU+JSAKICBjb3VudChuYW1lLm9mLnNlbnNvcikKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQoKcGwxIDwtIGdncGxvdChkYXRhPSBteWRhdGEgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihzZW5zb3IudHlwZSA9PSAiQ29udHJvbDQtVGVtcGVyYXR1cmUiKSkrCiAgICAgIGdlb21fcG9pbnQoYWVzKHk9bWVzc2FnZSx4PWNsYXNzZXMsY29sb3I9bmFtZS5vZi5zZW5zb3IpLAogICAgICBwb3NpdGlvbj1wb3NpdGlvbl9qaXR0ZXIoaD0wLjE1LHc9MC4xNSkpCmBgYAoKRGllIEF1c2dhYmUgdm9uIGdncGxvdCBpc3QgbmljaHQgSW50ZXJha3RpdiwgZGFoZXIgYmVudXR6ZSBpY2ggZ2VybmUgenVzw6R0emxpY2ggZGFzIFBha2V0IHBsb3RseS4gRGVyIFBhcmFtZXJlciBwb3NpdGlvbl9qaXR0ZXIgc29yZ3QgZGFmw7xyLCBkYXNzIFB1bmt0ZSBuaWNodCDDvGJlcmxhcHBlbiwgc29uZGVybiB3ZW5uIEJlb2JhY2h0dW5nZW4gaMOkdWZpZ2VyIHZvcmtvbW1lbiwgZGllc2UgYXVjaCBow6R1ZmlnZXIgU2ljaHRiYXIgc2luZCB1bmQgZGFmw7xyIGVpbmUga2xlaW5lIEFid2VpY2h1bmcgenVnZXJlY2huZXQgYmVrb21tZW4uIEdpYnQgZXMgQXVmZsOkbGxpZ2tlaXRlbj8KCmBgYHtyfQpsaWJyYXJ5KHBsb3RseSkgCmZpZyA8LSBnZ3Bsb3RseShwbDEpCmZpZwpgYGAKCkJldHJhY2h0dW5nIGFscyBCb3hwbG90cy4gV2VubiBkaWUgQm94ZW4gc2ljaCBuaWNodCBtZWhyIMO8YmVybGFwcGVuIHNwcmljaHQgbWFuIHZvbiBzdGF0aXN0aXNjaCBzaWduaWZpa2FudCB1bnRlcnNjaGllZGxpY2guIEF1c3JlacOfZXIgZXJrZW5udCBtYW4gYW4KCmBgYHtyfQpwbC5ib3ggPC0gZ2dwbG90KGRhdGE9IG15ZGF0YSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNlbnNvci50eXBlID09ICJDb250cm9sNC1UZW1wZXJhdHVyZSIpKSsKICAgICAgZ2VvbV9ib3hwbG90KGFlcyh5PW1lc3NhZ2UseD1jbGFzc2VzLCBmaWxsPSBuYW1lLm9mLnNlbnNvcikpCgpnZ3Bsb3RseShwbC5ib3gpCmBgYAoKRWluaWdlIFNlbnNvci1CZW9iYWNodHVuZ2VuIGhhYmVuIGJlcmVpdHMgZWluIEZsYWcgIklnbm9yZSIuIEVzIHdpcmQgZGV1dGxpY2gsIGRhc3MgZGFzIGRpZSBCZW9iYWNodHVuZ2VuIHZvbiAqKlQxMDEqKiBzaW5kLCBkaWUgYW5zY2hlaW5lbmQgbmljaHQgdmFsaWRlIHNpbmQuIAoKYGBge3J9CnBsMiA8LSBnZ3Bsb3QoZGF0YT0gbXlkYXRhICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihzZW5zb3IudHlwZSA9PSAiQ29udHJvbDQtVGVtcGVyYXR1cmUiKSAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIocm9vbS5kZXRhaWwgPT0gIklnbm9yZSIpKSsKICAgICAgZ2VvbV9wb2ludChhZXMoeT1tZXNzYWdlLHg9Y2xhc3NlcywgY29sb3I9bmFtZS5vZi5zZW5zb3IpLAogICAgICAgICAgICAgICAgcG9zaXRpb249cG9zaXRpb25faml0dGVyKGg9MC4xNSx3PTAuMTUpKQoKZ2dwbG90bHkocGwyKQpgYGAKCgoKSGllciBhbGxlIEJlb2JhY2h0dW5nc3dlcnRlIG9obmUgSWdub3JlLUZsYWcuCgpgYGB7cn0KcGwzIDwtIGdncGxvdChkYXRhPSBteWRhdGEgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKHNlbnNvci50eXBlID09ICJDb250cm9sNC1UZW1wZXJhdHVyZSIpICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihyb29tLmRldGFpbCAhPSAiSWdub3JlIikpKwogICAgICBnZW9tX3BvaW50KGFlcyh5PW1lc3NhZ2UseD1jbGFzc2VzLCBjb2xvcj1uYW1lLm9mLnNlbnNvciksCiAgICAgICAgICAgICAgICBwb3NpdGlvbj1wb3NpdGlvbl9qaXR0ZXIoaD0wLjE1LHc9MC4xNSkpCgpnZ3Bsb3RseShwbDMpCmBgYAoKCiMgQXNzb3ppYXRpb25zcmVnZWxuIHp1ciBFeHBsb3JhdGlvbiB2b24gQWt0aXZpdMOkdGVuCgpCZWkgd2VsY2hlbiBBa3Rpdml0w6R0ZW4gdmVyw6RuZGVybiBTZW5zb3JlbiBpaHJlbiBadXN0YW5kPyBEYWbDvHIgaXN0IGRlciBOYW1lIGRlcyBTZW5zb3JzIGVpbiBJdGVtLiBKZWRlciBCZW9iYWNodHVuZ3N0YWcgaXN0IGVpbmUgbmV1ZSBUcmFuc2FrdGlvbi4gRGFubiBrYW5uIG1pdCBhcHJpb3JpLUFsZ29yaXRobXVzIGVybWl0dGVsdCB3ZXJkZW4sIHdlbGNoZSBTZW5zb3JlbiBnZW1laW5zYW0gaWhyZW4gWnVzdGFuZCB3w6RocmVuZCBiZXN0aW1tdGVyIEFraXRpdml0w6R0ZW4gw6RuZGVybi4gCgpgYGB7cn0KbGlicmFyeShhcnVsZXMpICAgICAgICMgQXNzb3ppYXRpb25zcmVnZWxuCmxpYnJhcnkobHVicmlkYXRlKSAgICAjRXh0cmFrdGlvbiB2b24gZGF5IGluIHllYXIgeWRheSgpCgojIGplZGVyIGVpbnplbG5lIFRhZyBpc3QgZWluZSBUcmFuc2FrdGlvbgpteWRhdGEgPC0gbXlkYXRhICU+JQogICAgICAgICAgICBtdXRhdGUodHJhbnNfaWQgPSB5ZGF5KHRpbWVzdGFtcCkpICAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoKHJvb20ubGV2ZWwgIT0gIklnbm9yZSIpfChyb29tLmRldGFpbCAhPSAiSWdub3JlIikpIAoKIyBBa3Rpdml0YWV0ZW4gTGFiZWwgYmVrb21tZW4gICAgICAgICAgICAKZ3JvdXBzIDwtIG15ZGF0YSAlPiUgc2VsZWN0KGNsYXNzZXMpICU+JSBiYXNlOjp1bmlxdWUoKSAlPiUgdW5saXN0KCkKYGBgCgpVbSBkaWUgRXJnZWJuaXNzZSBkZXMgYXByaW9yaS1BbGdvcml0aG11cyBhYnNwZWljaGVybiB6dSBrw7ZubmVuLCB3aXJkIHZvcmhlciBlaW5lIExpc3RlIGFuZ2VsZWd0LiBGw7xyIGplZGUgQWt0aXZpdMOkdCBnaWJ0IGVzIGVpbmVuIEVpbnRyYWcuCgpgYGB7cn0KbXlydWxlcyA8LSB2ZWN0b3IoImxpc3QiLGxlbmd0aChncm91cHMpKQpuYW1lcyhteXJ1bGVzKSA8LSBncm91cHMKYGBgCgpGw7xyIGplZGUgQWt0aXZpdMOkdCBlcm1pdHRlbHQgYXByaW9yaSBBbGdvcml0aG11cyBSZWdlbG4uCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZm9yIChpIGluIHNlcV9hbG9uZyhncm91cHMpKXsKbXlydWxlc1tbZ3JvdXBzW2ldXV0gPC0gbXlkYXRhICU+JQogICAgZmlsdGVyKGNsYXNzZXMgPT0gZ3JvdXBzW2ldKSAlPiUKICAgIHRyYW5zYWN0aW9ucyhmb3JtYXQgPSAibG9uZyIsIGNvbHM9YygidHJhbnNfaWQiLCJuYW1lLm9mLnNlbnNvciIpKSAlPiUKICAgICAgYXByaW9yaShwYXJhbWV0ZXI9bGlzdChzdXBwPTAuNSwgY29uZj0wLjksIG1heGxlbj02KSkgCn0KYGBgCgpEYXJzdGVsbHVuZyBkZXIgQXNzb3ppYXRpb25zcmVnZWxuLiBFaW5lICJsZWVyZSIgUmVnZWwsIGQuaC4gTEhTID0ge30sIGJlZGV1dGV0LCBkYXNzIGVnYWwgd2FzIGxpbmtzIGltIEl0ZW1zZXQgc3RlaHQsIGVzIHdpcmQgaW1tZXIgenVyIFJIUyBmw7xocmVuLiAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIEF1c2dhYmUgZGVyIEVyZ2Vibmlzc2UKZm9yIChpIGluIHNlcV9hbG9uZyhncm91cHMpKXsKcHJpbnQoZ3JvdXBzW2ldKQpteXJ1bGVzW1tncm91cHNbaV1dXSAlPiUgaGVhZChuPTMsIGJ5PSJsaWZ0IikgJT4lIGluc3BlY3QKfQpgYGAKCgo=